import axios from 'axios';

import {
	toast
} from '~/composables/util';
import {
	getToken
} from '~/composables/auth';
import store from './store';

const service = axios.create({
	baseURL: "/api"
});

// 添加请求拦截器
service.interceptors.request.use(function(config) {
	const token = getToken();
	if (token) {
		config.headers["token"] = token;
	}
	return config;
}, function(error) {
	return Promise.reject(error);
});

// 添加响应拦截器
service.interceptors.response.use(function(response) {
	// 2xx 范围内的状态码都会触发该函数。
	// 对响应数据做点什么
	return response.data.data;
}, function(error) {
	const msg = error.response.data.msg || "请求失败";

	if (msg === "非法token,请先登录") {
		store.dispatch("logout").finally(() => location.reload());
	}

	toast(msg, "error");

	// 超出 2xx 范围的状态码都会触发该函数。
	// 对响应错误做点什么
	if (error.response) {
		const errorMsg = error.response.data.msg || "请求失败";
		switch (error.response.status) {
			case 401:
				toast('账号或密码错误', "error");
				break;
			default:
				toast(errorMsg, "error");
		}
	}
	return Promise.reject(error);
});

// 将 export 语句移到模块最外层
export default service;